package com.linzelin;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.joda.time.DateTime;
import org.junit.Test;
import java.io.FileOutputStream;

public class ExcelWriteTest {

    private String path = "C:\\Users\\啦啦啦\\Desktop\\";

    @Test
    //这个是03年xls版本表格的操作
    public void testWrite03() throws Exception {

        //1.创建一个工作簿
        Workbook workbook = new HSSFWorkbook();

        //2.创建一个工作表
        Sheet sheet = workbook.createSheet("超级无敌sb林泽霖的表格");

        //3.创建一个行
        Row row1 = sheet.createRow(0);
        //这里的0是代表创建的是第一行的意思
        Row row2 = sheet.createRow(1);

        //4.创建一个单元格
        Cell cell11 = row1.createCell(0);
        Cell cell12 = row1.createCell(1);
        //这里的0代表的就是第1列的意思了
        Cell cell21 = row2.createCell(0);
        Cell cell22 = row2.createCell(1);

        //5.写入数据
        cell11.setCellValue("我是你爸爸");
        cell12.setCellValue("我也不知道我写了什么");
        cell21.setCellValue("统计时间测试下");
        cell22.setCellValue(new DateTime().toString("yyyy-MM-dd HH:mm:ss"));

        //6.获取流对象用于写入
        FileOutputStream fileOutputStream = new FileOutputStream(path + "测试用03版本.xls");
        //注意这里是03版本的excel表格所以需要使用.xls结尾
        workbook.write(fileOutputStream);
        //输出

        fileOutputStream.close();

        System.out.println("生成完成");
    }

    @Test
    //这个是07年xlsx版本表格的操作
    public void testWrite07() throws Exception{
        //1.创建一个工作簿
        Workbook workbook = new XSSFWorkbook();
        //有没有注意到07版本的这里的对象变了

        //2.创建一个工作表
        Sheet sheet = workbook.createSheet("超级无敌sb林泽霖的表格");

        //3.创建一个行
        Row row1 = sheet.createRow(0);
        //这里的0是代表创建的是第一行的意思
        Row row2 = sheet.createRow(1);

        //4.创建一个单元格
        Cell cell11 = row1.createCell(0);
        Cell cell12 = row1.createCell(1);
        //这里的0代表的就是第1列的意思了
        Cell cell21 = row2.createCell(0);
        Cell cell22 = row2.createCell(1);

        //5.写入数据
        cell11.setCellValue("我是你爸爸");
        cell12.setCellValue("我也不知道我写了什么");
        cell21.setCellValue("统计时间测试下");
        cell22.setCellValue(new DateTime().toString("yyyy-MM-dd HH:mm:ss"));

        //6.获取流对象用于写入
        FileOutputStream fileOutputStream = new FileOutputStream(path + "测试用07版本.xlsx");
        //注意这里是07版本的excel表格所以需要使用.xlsx结尾
        workbook.write(fileOutputStream);
        //输出

        fileOutputStream.close();

        System.out.println("生成完成");
    }

    @Test
    //大数据写入03年版本
    public void testWrite03Big() throws Exception{
        long begin = System.currentTimeMillis();

        //其余流程差不多就不多打注释了,有区别的地方再打
        Workbook workbook = new HSSFWorkbook();
        Sheet sheet = workbook.createSheet();
        for (int i = 0; i < 65536; i++) {
            Row row = sheet.createRow(i);
            for (int i1 = 0; i1 < 10; i1++) {
                Cell cell = row.createCell(i1);
                cell.setCellValue(i1);
            }
        }
        FileOutputStream fileOutputStream = new FileOutputStream(path + "测试用大数据03版本.xls");
        workbook.write(fileOutputStream);
        fileOutputStream.close();
        long end = System.currentTimeMillis();
        System.out.println("使用时间为" + (end-begin)/1000.0+"s");
        //使用时间为2.359s
    }

    @Test
    //大数据写入07年版本
    public void testWrite07Big() throws Exception{
        long begin = System.currentTimeMillis();

        //其余流程差不多就不多打注释了,有区别的地方再打
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet();
        for (int i = 0; i < 65536; i++) {
            Row row = sheet.createRow(i);
            for (int i1 = 0; i1 < 10; i1++) {
                Cell cell = row.createCell(i1);
                cell.setCellValue(i1);
            }
        }
        FileOutputStream fileOutputStream = new FileOutputStream(path + "测试用大数据07版本.xlsx");
        workbook.write(fileOutputStream);
        fileOutputStream.close();
        long end = System.currentTimeMillis();
        System.out.println("使用时间为" + (end-begin)/1000.0+"s");
        //使用时间为6.743s
    }

    @Test
    //大数据写入07年版本的升级版本
    public void testWrite07BigPlus() throws Exception{
        long begin = System.currentTimeMillis();

        //其余流程差不多就不多打注释了,有区别的地方再打
        Workbook workbook = new SXSSFWorkbook();
        Sheet sheet = workbook.createSheet();
        for (int i = 0; i < 65536; i++) {
            Row row = sheet.createRow(i);
            for (int i1 = 0; i1 < 10; i1++) {
                Cell cell = row.createCell(i1);
                cell.setCellValue(i1);
            }
        }
        FileOutputStream fileOutputStream = new FileOutputStream(path + "测试用大数据07PLUS版本.xlsx");
        workbook.write(fileOutputStream);
        fileOutputStream.close();

        ((SXSSFWorkbook)workbook).dispose();
        //这个就是清除临时文件的操作了
        long end = System.currentTimeMillis();
        System.out.println("使用时间为" + (end-begin)/1000.0+"s");
        //使用时间为1.397sd
    }

}
